#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <time.h>
#include <math.h>
#include <pthread.h>
#include <unistd.h>

int main(){
    /* Declaração de Variáveis */
    mpf_t pi; 
    unsigned long int dentro = 0, total = 0;
    FILE *f;
    long int precisao = 33333333;
    int i;
    float j, x, y;
    clock_t inicio = 0, fim = 0;
    
	
    /* marca o clock de inicio do programa */
    inicio = clock();

    /* seta a precsão para 10 milhões de casas decimais */
    mpf_set_default_prec(precisao);

    /* inicialização das variáveis, todas assumem valor 0 */
    mpf_init(pi);

    /* insere os valores iniciais */
    /* dentro = fora = 0 */
    mpf_set_d(pi, 0);

    /* determina o srand() */
    srand(time(NULL));

    /* realiza o laço 10000000 vezes */
    while(total <= 10000000 ){
	/* seta valores "aleatórios" para x e y */	
        x =  ( (float) rand())/RAND_MAX;
	y =  ( (float) rand())/RAND_MAX;
	if( sqrt(x*x + y*y) < 1){
	    dentro++; 
	}
   
	total++;
    }

    /* imprime pi */
    mpf_set_ui(pi,dentro);
    mpf_mul_ui(pi, pi, 4);
    mpf_div_ui(pi,pi,total);
 
    f = fopen("pi_monte_carlo_sequencial.txt", "w");
    i = mpf_out_str(f,10, 0, pi);
    
    /* marca o clock do fim do programa */
    fim = clock();
    j = (fim - inicio);
    /* imprime o numero de caracteres escritos e os segundos gastos */
    fprintf(f,"\n%d caracteres escritos\n%f segundos gastos", i, j/CLOCKS_PER_SEC);

    fclose(f);

    return 0;
}
